var Stringify = function (obj) {
    var type = typeof obj;
    // console.log(type,1)
    // 判断是否为对象
    // console.log(type !== "object",3)
    if (type !== "object") {
        // 如果数据类型不是对象，先判断是否为字符串/underfined/fun函数
        if (/string|boolean|number/.test(type)) {
            //  如果是，直接在原来的基础上拼接成字符串
            obj = '"' + obj + '"';
            //  console.log(obj,2)
            return String(obj);
        }
        else if (/undefined|function/) {
            return;
        }
        ;
    }
    else {
        // 当obj是对象时再判断是否为数组
        var arr = Array.isArray(obj);
        //  console.log(arr)
        var json = [];
        //  遍历object中的每一项，判断每一项中的具体数值类型
        for (var k in obj) {
            var item = obj[k];
            //  判断每一项数据类型
            var type2 = typeof item;
            if (/string/.test(type2)) {
                item = '"' + item + '"';
            }
            else if (type2 === "object") {
                // 如果item还是object
                item = Stringify(item);
            }
            else if (/undefined|function/.test(type2)) {
                //  如果这一项为undefined/function，需要跳过此环节，因为最后的结果中不会显示
                continue;
                // return item 
            }
            // arr为true说明是数组 如果是false说明是对象
            json.push((arr ? "" : '"' + k + '":') + item);
            // console.log(json,4)
        }
        return (arr ? '[' : '{') + json.join(",") + (arr ? ']' : '}');
    }
};
// console.log(Stringify(5))
// console.log(Stringify([1,false,"a"]))
// console.log(Stringify({a:1,b:undefined,c:function(){}}))
// console.log(Stringify(undefined))
// console.log(Stringify({a:1,b:undefined,c:{h:1,f:false}}))
var Parse = function (obj) {
    // eval是以{}作为开始和结束的标志，在 js 中，它会被当成一个语句块来处理，所以必须强制性的将它转换成一种表达式。加上圆括号的目的是迫使 eval 函数在处理 JavaScript 代码的时候强制将括号内的表达式（expression）转化为对象，而不是作为语句（statement）来执行。
    return eval("(" + obj + ")");
    // let type=typeof obj1;
    // if(type!=="object"){
    //   if(/string|boolean|number/.test(type)){
    //     return obj1;
    //   }
    // }else{
    //   // 如果是object就判断是不是数组
    //   let arr=Array.isArray(obj1);
    // //  console.log(arr)
    //  let json:any=[];
    // //  遍历item,判断每一项的数据类型
    //  for (var k in obj1){
    //   //  let item=obj1[k]
    //    let type1=typeof k;
    //    if(/string/.test(type1)){
    //      var key=eval("("+k+")")
    //      console.log(key)
    //    }
    //   json.push(arr?obj1[k]:key+":"+obj1[k])
    //  }
    //  return (arr?'[':'{')+json+(arr?']':'}') 
    // }
};
// console.log(Parse(Stringify(5)))
// console.log(Parse(Stringify([1,false,"a"])))
// console.log(Parse(Stringify({a:1,b:undefined,c:function(){}})))
// console.log(Parse(Stringify(undefined)))
// console.log(Parse(Stringify({a:1,b:undefined,c:{h:1,f:false}})))
module.exports = {Stringify,Parse};
